﻿using System.Web;

namespace Sex
{
    // Additional reading
    // http://www.asp.net/whitepapers/add-mobile-pages-to-your-aspnet-web-forms-mvc-application
    // http://51degrees.mobi/Products/NETMobileAPI/tabid/86/Default.aspx
    // http://mdbf.codeplex.com/
    // http://wurfl.sourceforge.net/dotNet/

    public partial class Sex : System.Web.UI.Page
    {
        public class ListMobile : MyList
        {
            // http://www.codeproject.com/Articles/34422/Detecting-a-mobile-browser-in-ASP-NET
            public static string[] mobiles =
                new[]
                    {
                        "midp", "j2me", "avant", "docomo", 
                        "novarra", "palmos", "palmsource", 
                        "240x320", "opwv", "chtml",
                        "pda", "windows ce", "mmp/", 
                        "blackberry", "mib/", "symbian", 
                        "wireless", "nokia", "hand", "mobi",
                        "phone", "cdm", "up.b", "audio", 
                        "SIE-", "SEC-", "samsung", "HTC", 
                        "mot-", "mitsu", "sagem", "sony", "alcatel", "lg", "eric", "vx", 
                        "NEC", "philips", "mmm", "xx", 
                        "panasonic", "sharp", "wap", "sch",
                        "rover", "pocket", "benq", "java", 
                        "pt", "pg", "vox", "amoi", 
                        "bird", "compal", "kg", "voda",
                        "sany", "kdd", "dbt", "sendo", 
                        "sgh", "gradi", "jb", "dddi", 
                        "moto", "iphone"
                    };

            public static bool isMobileBrowser()
            {
                //GETS THE CURRENT USER CONTEXT
                HttpContext context = HttpContext.Current;

                //FIRST TRY BUILT IN ASP.NT CHECK
                if (context.Request.Browser.IsMobileDevice)
                {
                    return true;
                }
                //THEN TRY CHECKING FOR THE HTTP_X_WAP_PROFILE HEADER
                if (context.Request.ServerVariables["HTTP_X_WAP_PROFILE"] != null)
                {
                    return true;
                }
                //THEN TRY CHECKING THAT HTTP_ACCEPT EXISTS AND CONTAINS WAP
                if (context.Request.ServerVariables["HTTP_ACCEPT"] != null &&
                    context.Request.ServerVariables["HTTP_ACCEPT"].ToLower().Contains("wap"))
                {
                    return true;
                }
                //AND FINALLY CHECK THE HTTP_USER_AGENT 
                //HEADER VARIABLE FOR ANY ONE OF THE FOLLOWING
                if (context.Request.ServerVariables["HTTP_USER_AGENT"] != null)
                {
                    //Create a list of all mobile types
                    //Loop through each item in the list created above 
                    //and check if the header contains that text
                    foreach (string s in mobiles)
                    {
                        if (context.Request.ServerVariables["HTTP_USER_AGENT"].ToLower().Contains(s.ToLower()))
                        {
                            return true;
                        }
                    }
                }

                return false;
            }
            public static bool UserAgentContainsMobile()
            {
                HttpContext context = HttpContext.Current;
                if (context.Request.ServerVariables["HTTP_USER_AGENT"] == null) return false;
                foreach (string s in mobiles)
                {
                    if (context.Request.ServerVariables["HTTP_USER_AGENT"].ToLower().Contains(s.ToLower()))
                    {
                        return true;
                    }
                }
                return false;
            }
            public ListMobile(State MyState)
                : base(MyState, "Mobile Detection")
            {
                HttpContext context = HttpContext.Current; 
                Add("Request.Browser.IsMobileDevice", context.Request.Browser.IsMobileDevice.ToString());
                string http_wap_profile = context.Request.ServerVariables["HTTP_X_WAP_PROFILE"];
                Add("Request.ServerVariables<br/>[\"HTTP_X_WAP_PROFILE\"]", http_wap_profile == null ? "null" : http_wap_profile.ToString());
                if (http_wap_profile!=null)
                    Add("Request.ServerVariables<br/>[\"HTTP_X_WAP_PROFILE\"]", "Is mobile device");
                string http_accept = context.Request.ServerVariables["HTTP_ACCEPT"];
                Add("Request.ServerVariables<br/>[\"HTTP_ACCEPT\"]", http_accept == null ? "null" : http_accept.ToString());
                if (http_accept!=null)
                    Add("Request.ServerVariables<br/>[\"HTTP_ACCEPT\"].ToLower().Contains(\"wap\")", context.Request.ServerVariables["HTTP_ACCEPT"].ToLower().Contains("wap").ToString());
                Add("List of Mobile Types", GetStringArray(mobiles));
                string http_useragent = context.Request.ServerVariables["HTTP_USER_AGENT"];
                Add("Request.ServerVariables<br/>[\"HTTP_USER_AGENT\"]", http_useragent == null ? "null" : http_useragent.ToString());
                Add("Request.ServerVariables<br/>[\"HTTP_USER_AGENT\"]<br/>.ToString().ContainsOneOfMobileTypes", UserAgentContainsMobile().ToString());
            }
        }
    }
}